package com.catazy.base.data.retrofit

import retrofit2.Call
import retrofit2.CallAdapter
import java.lang.reflect.Type

/**
 * 作者: Tao
 * 日期: 2024/12/20
 * 时间: 14:48
 * 描述: [ApiResultCallAdapter] 是一个适配器类，用于将Call对象转换为返回[ApiResult]的Call对象。
 *  这主要用于在进行网络请求时，将请求结果包装在[ApiResult]中，以便统一处理请求结果。
 *
 *  @param successType 成功时返回的数据类型。这个类型用于表示API调用成功时返回的具体数据结构。
 */
internal class ApiResultCallAdapter<T>(
    private val successType: Type
) : CallAdapter<T, Call<ApiResult<T>>> {

    /**
     * [responseType] 方法返回成功时的数据类型。
     * 这个方法主要用于获取适配器处理的原始数据类型。
     *
     * @return 成功时返回的数据类型。
     */
    override fun responseType(): Type = successType

    /**
     * [adapt] 方法将传入的Call对象适配为返回[ApiResult]的Call对象。
     * 这样做是为了在不修改原始Call对象的基础上，增加对API调用结果的额外处理逻辑。
     *
     * @param call 原始的Call对象，代表一个待执行的网络请求。
     * @return 返回一个包装后的Call对象，它将返回[ApiResult]类型的结果。
     */
    override fun adapt(call: Call<T>): Call<ApiResult<T>> = ApiResultCall(call)
}
